iT邦幫忙

2023 iThome 鐵人賽

DAY 13
0
Software Development

Java基礎筆記系列 第 13

Java的封裝 Encapsulation

  • 分享至 

  • xImage
  •  

Java是物件導向語言(OOP, Object Oriented Programming),使用訊息傳遞機制(Message Passing),透過物件接收、處理、傳送訊息來實現功能。
Java具有三大特性:封裝、繼承、多型。接下來分三篇依序介紹。

封裝

封裝是將類別(class)設定存取限制,其事物的屬性、方法視需求隱藏起來,保留特定方法讓其他的類別引用。
主要能夠保留自訂的資訊隱私,避免被呼叫使用後,誤調其值造成方法誤用;而後續要修改方法時,也僅要處理該類別即可,不用修改外部呼叫此方法的內容。

存取修飾子Access Modifiers

Java的存取修飾子,依照可存取範圍,從高至低(最開放到最隱私保護)分別:
public,protected,default,private。
存取的範圍有類別Class、套件Package、或子類別Subclass。

  1. public(公開)-所有類別都能存取,屬最開放的。
public int number = 100;
//代表所有類別、所有套件、所有人都能存取此資料。
  1. protected(保護)-同套件底下的類別皆可存取,不同套件只能存取其子類別,換句話說,不同套件的非子類別之類別不可存取。
protected void protectedMethod() {
    System.out.println("Protected Method");
}
  1. default(空白-預設)-僅能存取同套件底下的類別。
    ※不是直接用"Default",是指沒有其他封裝權限修飾字,這就是預設
class DefaultClass {
    int defaultField;
    
    void defaultMethod() {
        System.out.println("Default Method");
    }
}
  1. private(私有)-只有這個類別的內部才能存取,屬最封閉。
private int privateField;

一般類別封裝設計

物件導向著重在REUSE,因此,個人設計的程式使用封裝處理,不要讓他人直接使用,比較可以保護程式的使用結果。
實體變數可以設定為private,再透過public getXXX 、public setXXX處理。
※若只提供get而不設定set,代表只供讀取,不供寫入作用。

public class Person {
    private String name; //名字與年紀都設為私有
    private int age;

    public Person(String name, int age){
    this.name = name;
    this.age = age;
    }
    public String getName(){ //需要返回name屬性給呼叫者
        return name;
    }
    public void setName(String name){ // 不用返回值給呼叫者故使用void
        this.name = name;
    }
    public int getAge(){
        return age;
    }
}

 =========================================

class Test {
    public static void main(String[] args){
        Person p1 = new Person("Alex", 30);        
        System.out.println(p1.getName()); //印出Alex
        System.out.println(p1.getAge()); //印出30

        p1.setName("Eva");
        // p1.setAge("15"); //報錯,無此方法
        System.out.println(p1.getName()); //印出Eva
        System.out.println(p1.getAge());  //印出30
    }
}


上一篇
Java的參數與引數
下一篇
Java的繼承 Inheritance(父類別vs.子類別)
系列文
Java基礎筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言